Как сделать form.cleaned_data [] с полем m2m, строка + manytomanyfield? - Джанго - PullRequest
0 голосов
/ 28 июня 2018

Я изменил CharField учителя на ManyToManyField, теперь мои UserMessage и EmailMessage не работают,

модели, как показано ниже:

class UserMessage(models.Model):
    user = models.ManyToManyField(User,related_name="recipent")
    send_user = models.ForeignKey(Use,null=True, blank=True, on_delete=models.SET_NULL, related_name="sender")
    message = models.CharField(max_length=500)
    test_name =models.CharField(max_length=800, default='', blank=True)
    test_date = models.DateField(default=datetime.now)
    test_time = models.TimeField(default=datetime.now)

    `# when teacher is not ManyToManyField, the EmailMessage of body works well with test.teacher.user`
    teacher = models.ManyToManyField(User, related_name="+") 

test.teacher.username для CharField, как определить ManyToManyField?

body="Name of test:" + test.name  + ",Date :" + str(test.date) + ",Time:" + str(test.time) + ", Teachers:" + test.teacher.username

И частичный views.py для UserMessage, как показано ниже (не весь код), функция UserMessage работает хорошо, но я хотел бы знать, как изменить form.cleaned_data['teacher'].username на ManyToManyFiled? Я имею в виду, что это не form.cleaned_data['teacher.set()'] или что-то еще, большое спасибо за любой совет.

user_message.test_name = form.cleaned_data['name']
user_message.teacher = form.cleaned_data['teacher'].username
user_message.test_time = form.cleaned_data['time']
user_message.test_date = form.cleaned_data['date']

1 Ответ

0 голосов
/ 28 июня 2018

Вы должны назначить экземпляр пользователя, когда вы хотите установить чужой ключ, а не одно из его полей. Предполагая, что учитель является объектом пользователя, вы можете использовать что-то вроде

for user_teacher in form.cleaned_data['teacher']:
    user_message.teacher.add(user_teacher)

Если вы не передали экземпляр User (но сказали только имя пользователя), вам каким-то образом придется выбрать соответствующего учителя (ов), а затем добавить отношение m2m, например,

user_teacher = get_object_or_404(get_user_model(), username=form.cleaned_data['teacher'])
user_message.teacher.add(user_teacher)

, который будет работать при условии, что ваши имена пользователей уникальны.

...