Получение FieldError в фабрике modelformset в django view.py - PullRequest
0 голосов
/ 18 октября 2018

Я получаю FieldError как:

Неизвестные поля (отмеченные), указанные для AssistantNotes

Когда я вызываю страницу.Выкидывает эту ошибку.Я использую Django 1.9.5 и python 2.7.Я отметил поле в таблице AssistantNotes в моей БД.Если я удаляю «noteate» из строки modelformset_factory, на мой взгляд, это работает.Я не мог решить, почему он не показывает пометку, хотя это в БД и в модели.И выдает ошибку.Поле уже в модели.

Мой взгляд:

def edit_assistant_notes(request):
    isassistantsuperadmin = getUserPermissions(request) #Yes if 1, no if 0
    list = getUserType(request)
    userisassistant = list[2]
    if userisassistant == "YES" or isassistantsuperadmin ==1: 
        list = getUserType(request)
        type = list[0]
        usertype = list[1] #"Nöbetçi Muavin":1 , "Yetkili":2
        if request.method == 'GET':
            if AssistantNotes.objects.filter(notedate=nicosia_date(datetime.today()).date()).count() == 0:
                AssistantNotesFormsetFactory = modelformset_factory(AssistantNotes, fields=('time', 'notedate', 'categories', 'type', 'dailynote',))
            else:
                AssistantNotesFormsetFactory = modelformset_factory(AssistantNotes, fields=('time', 'notedate', 'categories', 'type', 'dailynote',), can_delete=True)
            if usertype == 1:
                formset = AssistantNotesFormsetFactory(queryset=AssistantNotes.objects.filter(notedate=nicosia_date(datetime.today()).date(), type=type))
            elif usertype == 2:
                formset = AssistantNotesFormsetFactory(queryset=AssistantNotes.objects.all().order_by("notedate", "time"))
            helper = TableInlineHelper()
            return render(request, 'edit-assistant-notes.html', {'formset': formset, 'helper': helper})

Моя модель:

    class AssistantNotes(BaseModel):
    categories = models.CharField(choices=CATEGORIES, default="GENERAL", max_length=100, verbose_name=_("CAT"))
    time = models.CharField(choices=TIME, default="-------------", max_length=20, verbose_name=_("Time"))
    dailynote = models.TextField(null=True, blank=True, verbose_name=_("Add Note"))
    writer = models.TextField(null=True, blank=True, verbose_name=_("Adder"))
    notedate = models.DateField(auto_now_add=True, db_index=True, verbose_name=_("Date"))
    type = models.CharField(choices=SCHOOLTYPE, default="---", max_length=100, verbose_name=_("SchoolType"))

    def __unicode__(self):
        return "%s / %s" % (self.dailynote, self.categories)

    class Meta:
        ordering = ['dailynote']

1 Ответ

0 голосов
/ 18 октября 2018

Как заставить это поле редактироваться?

Вместо установки auto_now_add вы можете переопределить метод save () модели, скажем

class AssistantNotes(BaseModel):
    ....
    notedate = models.DateField(db_index=True, verbose_name=_("Date"))
    def save(self, *args, **kwargs):
        if not self.id:
            self.notedate = timezone.now()
        return super(AssistantNotes, self).save(*args, **kwargs)
...