app.models.MultipleObjectsReturned:get()返回多个用户 - 它返回17

时间:2017-09-12 12:39:52

标签: python django

我收到错误,app.models.MultipleObjectsReturned:get()返回多个用户 - 它返回17! 。 我想解析excel并把它放到模型中(City& Prefecture& Area& User)。我写了

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.telephony.SmsManager
import android.widget.TextView
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    val textView = findViewById(R.id.mainTextView) as TextView
    SEND.setOnClickListener {
        textView.setText("click")
        val sm = SmsManager.getDefault()
        sm.sendTextMessage("123123123", null, "test", null, null)
        textView.setText("OK")

    }
  }
}

我想把这些数据 fourrows_transpose = list(map(list, zip(*fourrows))) val3 = sheet3.cell_value(rowx=0, colx=9) user3 = User.objects.get(corporation_id=val3) print(user3) if user3: area = Area.objects.filter(name="America") pref = Prefecture.objects.create(name="prefecture", area=user3.area) city = City.objects.create(name="city", prefecture=pref) price_u1000 = Price.upper1000.objects.get(city=city) price_500_1000 = Price.from500to1000.objects.get(city=city) price_u500 = Price.under500.objects.get(city=city) pref.name = "NY" pref.save() for i in range(len(fourrows_transpose)): city.name = fourrows_transpose[i][1] city.save() print(fourrows_transpose[i][1]) price_u1000.name = fourrows_transpose[i][2] price_u1000.save() print(fourrows_transpose[i][2]) price_500_1000.name = fourrows_transpose[i][3] price_500_1000.save() print(fourrows_transpose[i][3]) price_u500.name = fourrows_transpose[i][4] price_u500.save() print(fourrows_transpose[i][4]) 模型类似于'美国'到县的区域,城市A到城市的名称和×到价格的名称。我该如何解决这个问题?我该怎么写呢?

2 个答案:

答案 0 :(得分:2)

尝试使用此方法 first()

捕获实例的第一条记录
user3 = User.objects.filter(corporation_id=val3).first()

它有助于获取特定对象实例的第一条记录,这些可以帮助您

答案 1 :(得分:2)

下面:

user3 = User.objects.get(corporation_id=val3)

您尝试获得单个用户,但您有多个匹配corporation_id=val3的用户。由于objects.get()无法猜出你真正想要的是哪一个,因此使用非常明确的消息引发错误是明智的:&#34; get()返回多个用户 - 它返回17&#34; < / p>

此时您主要有四种解决方案:

  1. 获取与您的查询匹配的第一个用户(或最后一个或任意随机用户)(使用User.objects.filter(corporation_id=val3)。first()- or。last()`etc)并将其命名为天。好吧,你可以把它当作一种解决方案......有点......如果你不关心那个结果。

  2. 使corporation_id模型具有唯一性User。这意味着每个公司只能拥有一个用户,因此对于每个corporation_id,您必须选择一个并删除所有其他用户。好吧,你可以把它当作一种解决方案......有点......如果你不关心失去大多数用户的话。

  3. 添加另一个&#34; use_for_imports&#34;对用户模型的布尔字段,使该字段和corporation_id的组合唯一,并将您的查询更改为“User.objects.get(corporation_id = val3,use_for_import = True). This will also require that you mark one user as "use for imports" for each corporation, else get(){{1} } User.DoesNotExist`例外。

  4. 使用另一个用户字段或字段组合保证对您的用户查找是唯一的,或使用其他方式获取该区域(因为您只使用用户获取will raise a字段值) 。在这里,没有人可以提供帮助,因为您没有对您的模型,要求等做任何说明。