django версия 1.8 Объект ForeignKey не имеет атрибута - PullRequest
0 голосов
/ 10 марта 2020

В моем models.py у меня есть 3 класса

Project Finding FindingType

Отношения между сущностями:

Project может иметь от 0 до N Finding. Каждый результат имеет один тип поиска.

class Project(models.Model):
completed_date = models.DateField(blank=True, null=True)
.. and some other attributes

class RA_Finding_type(models.Model):
finding_title = models.CharField(max_length=40)
finding_desc = models.TextField()
remediation_desc = models.TextField()
trc_control_number = models.TextField()
display = models.BooleanField(blank=True)

class RA_Finding(models.Model):
project = models.ForeignKey(Project)
if (not project.completed_date):      # Error here.
   finding_type = models.ForeignKey(RA_Finding_type, limit_choices_to={'display': True},verbose_name='Weakness Type')
else:
   finding_type = models.ForeignKey(RA_Finding_type, limit_choices_to={'display': False},verbose_name='Weakness Type')

... другие атрибуты

В admin.py

class ProjectAdmin(admin.ModelAdmin):
 form = ProjectAdminForm  # For user sort...

 readonly_fields = ('id', ... others)

 inlines = [
            FindingInline,.. other inlines

           ]

class FindingInline(admin.StackedInline):
 model = RA_Finding
 def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
     field = super(FindingInline, self).formfield_for_foreignkey(db_field, request, **kwargs)
     if db_field.name == 'project':
         if request._obj_ is not None:
             field.queryset = field.queryset.filter(id__exact = request._obj_.pk)
         else:
             field.queryset = field.queryset.none()
     return field

 extra = 1

 fieldsets = (
     (None, {
        'fields': ('finding_type',
                  ... other fields
                  )
     })),

Я хочу заполнить атрибут find_type на основе даты завершения , Это первично для устаревших данных. Требование - для проектов с завершенной датой отображаются все типы поиска, в противном случае отображается только тип поиска, для которого установлено значение true. Когда я пытаюсь это сделать, я получаю сообщение об ошибке - объект ForeignKey не имеет атрибута. Есть ли способ достичь этого в Django? Ценю всю помощь.

1 Ответ

0 голосов
/ 10 марта 2020

Попробуйте сделать это при сохранении модели:

    def save(self, *args, **kwargs):
        if (not self.completed_date):
            self.finding...
        else:
            self.finding...

        super(Project, self).save(*args, **kwargs)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...