簡體   English   中英

Django CreateView-created_by,modified_by mixin不起作用

[英]Django CreateView - created_by, modified_by mixin not working

我已按照CBV上的spapas教程進行操作,並嘗試在創建視圖上應用mixin。 但是看起來它不能正確評估用戶外鍵的if not form.invoice.requester,因為它總是說:RelatedObjectDoesNotExist,它指向if not行中評估的字段。

有什么事嗎

views.py

class AuditableMixin(object, ):
def form_valid(self, form, ):
    if not form.instance.requester:
        form.instance.requester = self.request.user
    form.instance.modified_by = self.request.user
    return super().form_valid(form)

class NewOrderView(LoginRequiredMixin, PermissionRequiredMixin, AuditableMixin, generic.CreateView):
    permission_required = 'orders.add_order'
    form_class = NewOrderForm
    model = Order
    title = 'New Order'
    extra_context = {'title': title}

表格

class NewOrderForm(forms.ModelForm):
    class Meta:
        model = Order
        widgets = {
            'order_details': forms.Textarea,
        }
        exclude = (
            'status',
            'invoice',
            'requester',
            'modified_by',
        )

models.py

class Order(models.Model):
STATUS_CHOICES = (
    ('open', 'Open'),
    ('inprogress', 'In Progress'),
    ('rejected', 'Rejected'),
    ('closed','Closed'),
    ('resolved','Resolved'),
)

subject = models.CharField(
    max_length=30,
)

requester = models.ForeignKey(
    User,
    on_delete=models.PROTECT,
    related_name='orders',

)

order_details = models.TextField(

)

created = models.DateTimeField(
    auto_now_add=True,
)

updated = models.DateTimeField(
    auto_now=True,
)

status = models.CharField(
    max_length=12,
    default='open',
    choices= STATUS_CHOICES,
)

invoice = models.ForeignKey(
    Invoice,
    on_delete=models.PROTECT,
    blank= True,
    null=True,
    related_name='orders',
)

modified_by = models.ForeignKey(
    User,
    on_delete=models.PROTECT,
    related_name='orders_modified',
)

def __str__(self):
    return self.subject

def get_absolute_url(self):
    return reverse('Order_Detail', args=[str(self.pk)])

class Meta:
    ordering = ['-created']

謝謝。

在模型上調用ForeignKey對象時,實際上是在告訴Django執行查詢以獲取相關對象。 要檢查該關系是否存在,應檢查<fieldname>_id ,它是<fieldname>_id的實際名稱:

if not form.instance.requester_id:
    form.instance.requester = self.request.user

這樣,如果requester_idNone您不會執行查詢,這將通過RelatedObjectDoesNotExist錯誤進行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM