astable - django form in view



在Django Admin中篩選ManyToMany框 (5)

由於您選擇的是同一表單中的客戶所在的城市和類別,因此您需要一些JavaScript動態縮小類別選擇器,以便只選擇所選城市中的可用類別。

https://ffff65535.com

我有一個與另一個對像有多對多關係的對象。
在Django Admin中,這會在多選框中產生一個很長的列表。

我想過濾ManyToMany關係,因此我只能獲取客戶選擇的城市中可用的類別。

這可能嗎? 我需要為它創建一個小部件嗎? 如果是這樣 - 我怎麼複製從標準的ManyToMany領域的行為,因為我也想filter_horizo​​ntal函數。

這些是我的簡化模型:

class City(models.Model):
    name = models.CharField(max_length=200)


class Category(models.Model):
    name = models.CharField(max_length=200)
    available_in = models.ManyToManyField(City)


class Customer(models.Model):
    name = models.CharField(max_length=200)
    city = models.ForeignKey(City)
    categories = models.ManyToManyField(Category)

Category.objects.filter(available_in=cityobject)

這應該做到這一點。 該視圖應具有用戶選擇的城市,無論是在請求中還是作為該視圖函數的參數。


就像Ryan所說的那樣,必須有一些JavaScript來根據用戶選擇的內容動態改變選項。 發布的解決方案工作,如果保存城市和管理窗體重新加載,這就是過濾器工作時,但想到的情況下,用戶想編輯一個對象,然後更改城市下拉菜單,但類別中的選項不會刷新。



另一種方法是在Django Admin中使用formfield_for_manytomany

class MyModelAdmin(admin.ModelAdmin):
    def formfield_for_manytomany(self, db_field, request, **kwargs):
        if db_field.name == "cars":
            kwargs["queryset"] = Car.objects.filter(owner=request.user)
        return super(MyModelAdmin, self).formfield_for_manytomany(db_field, request, **kwargs)

考慮到“汽車”是ManyToMany領域。

檢查此鏈接了解更多信息。





django-widget