일대 다 관계로 연결된 두 가지 모델 인 활동과 사용자가 있습니다. 사용자는 하나의 활동에만 연결할 수 있지만 활동은 여러 사용자 항목에서 참조 할 수 있습니다.
// 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 | [email protected] | ab | 2020-01-20 | 2020-01-15| No | No | No | No
3 | [email protected] | 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
표에서 볼 수 있듯이 username_id 열에는 빈 값이 있으므로 views.py
새 활동을 저장하려고 할 때 코드를 수정 했지만 이제 오류가 발생합니다.ValueError: Cannot assign "3": Activity.username" must be a user instance.
def create_activity(request):
form_create = ActivityModelForm(request.POST or None)
username_id = None
if request.user.get_username():
username_id = request.user.id
if form_create.is_valid():
obj = form_create.save(commit=False)
obj.username = username_id
obj.save()
form_create = ActivityModelForm()
template_name = 'activity/formActivity.html'
context = {'form': form_create}
return render(request, template_name, context}
사용자 모델의 사용자를 요청에 할당합니다.
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()
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다