python - 如何将一个模型与另一个模型连接两次?
问题描述
我的项目中有两个模型。这将是一个用于向支持人员发送票证的小而简单的应用程序。
第一个模型适用于帖子/票证的作者
class Autor(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, unique=True)
service_group = models.BooleanField(default=False)
active = models.BooleanField(default=True)
def __str__(self):
return self.user.username
第二是门票。这只是它的一部分,但你会明白我的意思......
class Ticket(models.Model):
added_date = models.DateField('added date')
added_time = models.TimeField('added time')
topic = models.CharField(max_length=400, unique=False)
description = models.TextField()
post_author = models.ForeignKey(Author, on_delete=models.CASCADE, related_name='post_author')
status = models.ForeignKey(Status, on_delete=models.CASCADE, default=1)
open_date = models.DateField('open date', default='1900-01-01')
open_time = models.TimeField('open time', default='00:00')
service = models.ForeignKey(Author, on_delete=models.CASCADE, related_name='service')
close_date = models.DateField('close date', default='1900-01-01')
close_time = models.TimeField('close time', default='00:00')
def __str__(self):
return self.topic
但是,这就是模型作者的连接不起作用的原因。
Cannot assign "1": "Ticket.service" must be a "Author" instance.
在这里你有完整的错误信息
Environment:
Request Method: POST
Request URL: http://127.0.0.1:8000/new_ticket/
Django Version: 3.2.8
Python Version: 3.10.0
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'tickets_system',
'bootstrapform']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback (most recent call last):
File "C:\Users\home\PycharmProjects\tickets_system\venv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Users\home\PycharmProjects\tickets_system\venv\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\home\PycharmProjects\tickets_system\venv\lib\site-packages\django\contrib\auth\decorators.py", line 21, in _wrapped_view
return view_func(request, *args, **kwargs)
File "C:\Users\home\PycharmProjects\tickets_system\serwis\views.py", line 131, in new_ticket
form_new_ticket.instance.service = int(service1)
File "C:\Users\home\PycharmProjects\tickets_system\venv\lib\site-packages\django\db\models\fields\related_descriptors.py", line 215, in __set__
raise ValueError(
Exception Type: ValueError at /new_ticket/
Exception Value: Cannot assign "1": "Ticket.service" must be a "Author" instance.
和views.py文件...
def get_author(user):
qs = Autor.objects.filter(user=user)
if qs.exists():
return qs[0]
return None
def new_ticket(request):
form_new_ticket= TicketForm(request.POST or None, request.FILES or None)
date_now = datetime.now()
added_date = date_now.strftime("%Y-%m-%d")
time_now = timezone.now()
added_time = time_now.strftime("%H:%M")
open_date1 = '1900-01-01'
open_time1 = '00:00'
service1 = 1
close_date1 = '1900-01-01'
close_time1 = '00:00'
if form_new_ticket.is_valid():
author = get_author(request.user)
form_new_ticket.instance.open_date = open_date1
form_new_ticket.instance.open_time = open_time1
form_new_ticket.instance.service = int(service1)
form_new_ticket.instance.close_date = close_date1
form_new_ticket.instance.close_time = close_time1
form_new_ticket.instance.post_author = author
form_new_ticket.instance.added_date = request.POST.get('added_date')
form_new_ticket.instance.added_time = request.POST.get('added_time ')
form_new_ticket.save()
return redirect(nowe_zgloszenie)
context = {
'form_new_ticket': form_new_ticket,
'added_date': added_date,
'added_time ': added_time ,
}
return render(request, 'tickets_system/form_new_ticket.html', context)
更多细节... 它应该如何工作 Author 模型存储可以创建工单的用户,并在创建新工单时自动添加到工单表中。一些编辑用户拥有额外的“服务”权限。创建工单时,不知道谁将分配给该任务,因此该字段的值应为例如 1。最好为 0,但此值与 Author 表无关。
请帮助我正确连接它以使其工作。
解决方案
我认为您的错误是在模型票证上放置值 id 而不是实例作者,如果要使用 id,请尝试使用此示例插入带有 id 的服务:
Ticket(service_id="your data id")
或使用像这个例子这样的实例:
get_author = Autor.objects.get(id="author id")
Ticket(service=get_author)
推荐阅读
- node.js - 使用 AWS Lambda 获取“MongoServerSelectionError:服务器选择在 30000 毫秒后超时”
- xamarin - 使用 XAMARIN 打开 GPS
- php - “目标类 [Modules\\Admins\\Controllers\\AdminController] 不存在。”
- ios - InAppSettingsKit 完成按钮未显示在视图控制器上
- angular - 如何根据布尔条件渲染项目(在 Angular v10 中)
- powerbi - 我正在尝试获取最后一个分隔符 / dax only 解决方案之后的字符
- extension-function - 无法理解 Kotlin Android 中的扩展功能?
- python - 为什么我的代码中的 html.fromstring 不起作用?
- node.js - github repo 已经更新,但它没有显示在 CI/CD 的域中
- facebook-graph-api - Facebook API 不再返回媒体源,如何获取视频链接?