尝试在Django中创建新记录时出现外键错误

时间:2020-01-26 06:14:30

标签: python django django-models django-forms

我有两个以一对多关系链接的模型:活动和用户。一个用户只能连接到1个活动,但是一个活动可以从多个用户条目中引用。

EntityTypes.a

如表所示,username_id列的值为空,因此在尝试保存新活动时我在// Activity id | username_id | activity | initial_date | ending_date -- ------------ -------- ------------ ------------ 1 | | test | 2020-01-20 | None 45 | | test45 | 2020-01-25 | None // User username_id | email | username | last_login | date_joined |is_admin | is_active | is_staff | is_superuser ------------ ----------------- ---------- ------------ ----------- --------- --- -------------------------------- 2 | ab@hotmail.com | ab | 2020-01-20 | 2020-01-15| No | No | No | No 3 | xy@hotmail.com | ab | 2020-01-21 | 2020-01-18| No | No | No | No //models.py from django.utils import timezone from django.contrib.auth import get_user_model User = get_user_model() class Activity(models.Model): id = models.AutoField(primary_key=True) username_id = models.ForeignKey(User, on_delete=models.CASCADE) activity = models.CharField(null=False, max_length=140) initial_date = models.DateField(default=timezone.now(), null=False) ending_date = models.DateField(default=timezone.now(), null=False) class User(AbstractBaseUser): username_id = models.AutoField(primary_key=True) email = models.EmailField(verbose_name="email", max_length=60, unique=True) username = models.CharField(max_length=30, unique=True) last_login = models.DateTimeField(verbose_name='last login', auto_now=True) date_joined = models.DateTimeField(verbose_name='date joined', auto_now_add=True) is_admin = models.BooleanField(default=False) is_active = models.BooleanField(default=True) is_staff = models.BooleanField(default=False) is_superuser = models.BooleanField(default=False) USERNAME_FIELD = 'email' REQUIRED_FIELDS = ['username'] //forms.py from .models import Activity from django import forms class ActivityModelForm(forms.ModelForm): model = Activity fields = ['username_id', 'activity', 'initial_date', 'ending_date'] def __init__(self, *args, **kwargs): super(ActivityModelForm, self).__init__(*args, **kwargs) self.fields['username_id'].required = False self.fields['activity'].required = True self.fields['initial_date'].required = False self.fields['ending_date'].required = False 中修改了代码,但现在遇到错误views.py

ValueError: Cannot assign "3": Activity.username" must be a user instance.

1 个答案:

答案 0 :(得分:1)

将用户从用户模型分配给请求。用户

     username_id = User.objects.get(user=request.user)
     if form_create.is_valid():
            obj = form_create.save(commit=False)
            obj.username = username_id
            obj.save()
     form_create = ActivityModelForm()