我一直在試圖把一個解決方案,這用盡了所有的途徑,但我目前Python和Django的知識只能讓我至今。Null值違反非空約束在Django 1.9
我創建一個基本的票務系統和CreateView的用於工作,直到我創建了一個剖面模型,然後分離票務模型到它自己的應用程序。當我重構我的代碼時,已經創建了一些票據,這就是爲什麼我知道ListView的工作原理,DeleteView的工作原理以及DetailView的原理。 CreateView的作品,直到我點擊保存按鈕。
我的視圖和模型都低於;我希望有人能幫我解決這個問題。
票務型號
from django.db import models
from django.contrib.auth.models import User
....
from qcapp.models import Profile
class Ticket(models.Model):
# Relations
user = models.ForeignKey(Profile, on_delete=models.CASCADE, related_name="tickets", verbose_name="user")
# Attributes
title = models.CharField(max_length=250, verbose_name="Title", help_text="Enter a Ticket Title")
color = models.CharField(max_length=7,
default="#ffffff",
validators=[RegexValidator("(^#[0-9a-fA-F]{3}$)|(^#[0-9a-fA-F]{6}$)")],
verbose_name="Color",
help_text="Enter the hex color code, like #ccc or #cccccc")
description = models.TextField(max_length=1000)
created_date = models.DateTimeField(default=timezone.now, verbose_name='Created Date')
created_by = models.ForeignKey(User, related_name='created_by_user')
# Attributes
# Object Manager
objects = managers.ProjectManager()
# Meta and String
class Meta:
verbose_name = "Ticket"
verbose_name_plural = "Tickets"
ordering = ("user", "title")
unique_together = ("user", "title")
def __str__(self):
return "%s - %s" % (self.user, self.title)
def get_absolute_url(self):
return reverse('ticket_detail', args=[str(self.id)])
票務視圖(CreateView的只)
# -*- coding: utf-8 -*-
...
from django.views.generic import CreateView, UpdateView, DeleteView
...
from .models import Ticket
...
class TicketCreate(CreateView):
model = Ticket
template_name = "tickets/ticket_form.html"
fields = ['title', 'description']
def form_valid(self, form):
form.instance.created_by = self.request.user
return super(TicketCreate, self).form_valid(form)
...
剖面模型(導入票務模型)
from django.db import models
from django.conf import settings
from django.contrib.auth.models import User
from django.dispatch import receiver
from django.db.models.signals import post_save
from . import managers
class Profile(models.Model):
# Relations
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="profile", verbose_name="user")
# Attributes
interaction = models.PositiveIntegerField(default=0, verbose_name="interaction")
# Attributes
# Object Manager
objects = managers.ProfileManager()
# Custom Properties
@property
def username(self):
return self.user.username
# Methods
# Meta and String
class Meta:
verbose_name = "Profile"
verbose_name_plural = "Profiles"
ordering = ("user",)
def __str__(self):
return self.user.username
@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def create_profile_for_new_user(sender, created, instance, **kwargs):
if created:
profile = Profile(user=instance)
profile.save()
你有什麼問題保存? 'Ticket'或'Profile'或兩者?我會假設'Ticket'。如果是這樣的話,你正在分配'created_by'字段,但是你沒有分配'user'。 – themanatuf
個人資料運行良好...只需將它添加到此票中即可,因爲它與解決方案相關。你能否提供一個分配用戶到票證的例子?謝謝。 –
井'form_valid()'的'你你TicketCreate'已經這樣做:'form.instance.created_by = self.request.user'所以我想你需要做的是:'form.instance.user =自我。 request.user' – themanatuf